#ifndef __APP_H__
#define __APP_H__

#include "config.h"
#include "app_config.h"
#include "drv_jiffes.h"
#include "drv_network.h"

#if TCFG_DRV_INA219_SUPPORT
#include "drv_ina219.h"
#endif


#define SECOND    (1000)        // 1秒的毫秒数
#define MINUTE    (60*SECOND)   // 1分的毫秒数
// #define HOUR      (60*MINUTE)   // 1时的毫秒数


enum {
    E_RETCODE_OK=0,
    E_RETCODE_ERR,
};

enum {
    E_BAT_NORMAL=0, // 正常电量
    E_BAT_LOWWAR,   // 低电警告
    E_BAT_LOWOFF    // 低电关机
};

#pragma pack(2)
struct  app_t{
    uint8_t oled_refresh : 1;
    uint8_t reserved : 7;    
    
    uint8_t uv_level;   
    float tempertaure;
    
#if TCFG_DRV_INA219_SUPPORT
    struct ina219_value_t ina219_value;
#endif

#if TCFG_DRV_INA3221_SUPPORT
#endif


    uint8_t dev_uuid[14];   // 设备

    struct jiffes_t *pjiffes;
    struct jiffes_t jiffes_common;
    struct jiffes_t jiffes_10MS;    /* 10ms 周期 */
    struct jiffes_t jiffes_100MS;   /* 100ms 周期 */
    struct jiffes_t jiffes_250MS;   /* 250ms 周期 */
    struct jiffes_t jiffes_500MS;   /* 500ms 周期 */
    struct jiffes_t jiffes_1S;      /* 1s 周期 */
    struct jiffes_t jiffes_10S;     /* 10s 周期 */
    struct jiffes_t jiffes_dbgrecv; // DEBUG 串口接收超时

#if (TCFG_NETWORK_MODULE_TYPE == NETWORK_MODULE_4G)||(TCFG_NETWORK_MODULE_TYPE == NETWORK_MODULE_NB)
    uint8_t mqttrecon;          // MQTT重新连接
    uint8_t nb_psmmode;       // NB模块PSM模式设置标志
    uint8_t netinit_step;      // 网络复位重启
    uint8_t rtcntp_synced;   // 1：RTC已同步NTP网络时间，0：未同步 
    uint8_t status_synced;   // 0:状态未同步

    struct jiffes_t jmqtt_pub; // MQTT发布数据周期
    struct jiffes_t jnetcheck; // 网络模块状态检查
    struct jiffes_t jnetpwroff;// 网络模块关机时间

    struct network_t  network;      // 网络模块
#endif
};
#pragma pack()

void app_init(struct app_t *app);

#endif